package co.edu.udea.iw.rtf.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.rtf.dao.ProductoDAO;
import co.edu.udea.iw.rtf.dto.Producto;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

/**
 * 
 * @author juank
 *
 * Clase que implementa los metodos de la interfaz de ProductoDAO 
 *
 */
public class ProductoDAOImpl extends HibernateDaoSupport implements ProductoDAO {

	/**
	 * Metodo que obtiene una lsita de productos activos en la base de datos
	 * Crea una session de Hibernate para realizar la consulta y asignarlo a el ArrayList productos
	 * @retur List<Producto>
	 */
	@Override
	public List<Producto> obtenerActivos() throws RTFDaoException {
		// TODO Auto-generated method stub
		List<Producto> productos = new ArrayList<Producto>();
		
		Session sesion = null;
		try{
			sesion = getSession();
			
			productos = sesion.createCriteria(Producto.class)
							.addOrder(Order.asc("nombre"))
							.add(Restrictions.eq("activo", true))
							.list();
				
			return productos;
			
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}
		
	}

	/**
	 * Metodo que obtiene un objeto tipo Producto de acuerdo al codigo
	 * Crea una Session con la cual obtiene de producto.class el producto que corresponde al codigo
	 * @return Producto
	 * @param codigo
	 */
	@Override
	public Producto obtener(Integer codigo) throws RTFDaoException {
		// TODO Auto-generated method stub
		
		Producto producto;
		Session sesion = null;
		try{
			sesion = getSession();
			
			producto = (Producto)sesion.get(Producto.class, codigo);
				
			return producto;
			
		}catch (HibernateException e) {
			throw new RTFDaoException(e);
		}

	}

}
